ASP.NET Core-এ Model Binding এবং Model Validation দুটি গুরুত্বপূর্ণ প্রক্রিয়া, যা ইউজার ইনপুট এবং ডেটার সাথে কাজ করার ক্ষেত্রে সহায়ক। এগুলি ওয়েব অ্যাপ্লিকেশনের ডেটা গ্রহণ, প্রক্রিয়াকরণ এবং যাচাইয়ের জন্য ব্যবহৃত হয়। Model Binding ইউজার থেকে প্রাপ্ত ডেটা সঠিকভাবে কন্ট্রোলার অ্যাকশনে প্রেরণ করে, আর Model Validation ডেটার সঠিকতা যাচাই করে।
Model Binding হলো ASP.NET Core এর একটি প্রক্রিয়া যা HTTP রিকোয়েস্টের ডেটাকে C# অবজেক্টে রূপান্তরিত করে। এটি URL প্যারামিটার, ফর্ম ডেটা, কুয়্যারি স্ট্রিং, অথবা JSON পে লোড থেকে ডেটা গ্রহণ করে এবং সেই ডেটা কন্ট্রোলার বা অ্যাকশনের প্যারামিটার বা মডেল অবজেক্টে মেলিয়ে দেয়।
ধরা যাক, আমাদের একটি ব্লগ অ্যাপ্লিকেশন রয়েছে, যেখানে ইউজার একটি পোস্ট তৈরি করতে চান।
Controller:
public class PostController : Controller
{
[HttpPost]
public IActionResult CreatePost(BlogPost post)
{
if (ModelState.IsValid)
{
// Save the post to database
return RedirectToAction("Index");
}
return View(post);
}
}
Model:
public class BlogPost
{
public int Id { get; set; }
public string Title { get; set; }
[Required]
public string Content { get; set; }
}
View:
<form asp-action="CreatePost" method="post">
<label for="Title">Title</label>
<input type="text" id="Title" name="Title" />
<label for="Content">Content</label>
<textarea id="Content" name="Content"></textarea>
<button type="submit">Create Post</button>
</form>
এখানে Model Binding ফর্মের ইনপুট ডেটা (Title
এবং Content
) স্বয়ংক্রিয়ভাবে BlogPost
মডেলে বাইন্ড হবে এবং তারপর CreatePost
অ্যাকশন মেথডে পাঠানো হবে।
Model Validation হলো ডেটা যাচাই করার প্রক্রিয়া, যা অ্যাপ্লিকেশনের ইউজার ইনপুট বা রিকোয়েস্ট ডেটার সঠিকতা নিশ্চিত করে। এতে ডেটা অ্যানোটেশন (Data Annotations) ব্যবহার করা হয়, যা মডেল প্রপার্টিগুলির উপরে প্রয়োগ করা হয় এবং ইউজারের ইনপুট যাচাই করার জন্য নিয়ম নির্ধারণ করে।
ASP.NET Core-এর মডেল ভ্যালিডেশন সিস্টেমে বিভিন্ন ধরণের ডেটা অ্যানোটেশন অ্যাট্রিবিউট রয়েছে, যেমন Required
, StringLength
, Range
, EmailAddress
, ইত্যাদি, যা ইনপুট ফিল্ডের জন্য নিয়ম নির্ধারণ করে।
উপরের BlogPost
মডেলটি আমরা ব্যবহার করেছি, যেখানে Content
প্রপার্টির জন্য Required অ্যানোটেশন প্রয়োগ করা হয়েছে। এর মানে হলো, যদি ইউজার Content
ফিল্ডটি খালি রেখে ফর্ম জমা দেয়, তবে তা বৈধ হবে না এবং অ্যাপ্লিকেশন একটি ত্রুটি প্রদর্শন করবে।
Controller:
public class PostController : Controller
{
[HttpPost]
public IActionResult CreatePost(BlogPost post)
{
if (ModelState.IsValid)
{
// Save the post to database
return RedirectToAction("Index");
}
// If model is invalid, return the same view with error messages
return View(post);
}
}
এখানে ModelState.IsValid
চেক করে দেখানো হয় যে, ইউজারের ইনপুট সঠিক কিনা। যদি ইনপুট সঠিক না হয়, তাহলে View
ফেরত দেওয়া হয় এবং ত্রুটির বার্তা প্রদর্শিত হয়।
ASP.NET Core মডেল ভ্যালিডেশনের জন্য কিছু প্রচলিত ডেটা অ্যানোটেশন অ্যাট্রিবিউট রয়েছে:
উদাহরণ:
public class UserRegistration
{
[Required]
[StringLength(50, MinimumLength = 5)]
public string Username { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[Compare("Password")]
public string ConfirmPassword { get; set; }
[Required]
public string Password { get; set; }
}
Server-side validation: ASP.NET Core মডেল ভ্যালিডেশন মূলত সার্ভারে হয়, যেখানে ইনপুট ডেটা যাচাই করা হয় এবং যদি কোনো ত্রুটি থাকে, তাহলে তা ব্যবহারকারীকে জানানো হয়।
Client-side validation: ASP.NET Core jQuery Unobtrusive Validation ব্যবহার করে ক্লায়েন্ট সাইডে ভ্যালিডেশন করতে পারে, যাতে ইনপুট প্রক্রিয়া আরও দ্রুত হয় এবং সার্ভারকে অপ্রয়োজনীয় রিকোয়েস্ট পাঠানোর প্রয়োজন না পড়ে।
ASP.NET Core-এ Model Binding এবং Model Validation হল ডেটা গ্রহণ এবং যাচাইয়ের প্রক্রিয়া যা অ্যাপ্লিকেশনের কার্যকারিতা এবং নিরাপত্তা নিশ্চিত করে। Model Binding সহজভাবে ইউজারের ইনপুট গ্রহণ করে, এবং Model Validation নিশ্চিত করে যে ইনপুটটি সঠিক এবং গ্রহণযোগ্য।
Model Binding হলো ASP.NET Core-এ একটি শক্তিশালী ফিচার, যা HTTP রিকোয়েস্টের ডেটা (যেমন ফর্ম ডেটা, কুইরি স্ট্রিং, রুট ডেটা, এবং হেডার) থেকে ডেটা নিয়ে অ্যাপ্লিকেশনের অ্যাকশন মেথডে ডিফাইন করা প্যারামিটারে বা মডেলে রূপান্তর করে। এটি ডেভেলপারদের জন্য ডেটা প্রসেসিং সহজ এবং কার্যকর করে তোলে।
Model Binding স্বয়ংক্রিয়ভাবে নিচের উৎসগুলো থেকে ডেটা পায় এবং সেটিকে মডেলে বা প্যারামিটারে রূপান্তর করে:
?id=10
) থেকে ডেটা।Model Binding স্বয়ংক্রিয়ভাবে এই উৎসগুলো থেকে ডেটা পেয়ে উপযুক্ত টাইপে রূপান্তর করে এবং অ্যাকশন মেথডের প্যারামিটার বা মডেলে সেট করে।
একটি URL: /Product/Details/10
Controller এবং Action Method:
public IActionResult Details(int id)
{
// id = 10
return View();
}
এখানে Model Binding স্বয়ংক্রিয়ভাবে রুট ডেটা থেকে id
এর মান ১০ হিসেবে ধরে অ্যাকশন মেথডের প্যারামিটারে সেট করেছে।
HTML ফর্ম ডেটা থেকে মডেল বাইন্ডিংয়ের উদাহরণ:
<form method="post" action="/Product/Create">
<input type="text" name="Name" />
<input type="number" name="Price" />
<button type="submit">Create</button>
</form>
Controller এবং Model:
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
}
[HttpPost]
public IActionResult Create(Product product)
{
// product.Name এবং product.Price ফর্ম ডেটা থেকে বাউন্ড হবে।
return View(product);
}
Model Binding স্বয়ংক্রিয়ভাবে ফর্ম থেকে ডেটা নিয়ে Product
মডেলের প্রপার্টিতে সেট করে।
Data Annotations ব্যবহার করে মডেল প্রপার্টিগুলোর জন্য ভ্যালিডেশন রুল নির্ধারণ করা যায়। উদাহরণস্বরূপ:
public class Product
{
[Required(ErrorMessage = "Name is required.")]
public string Name { get; set; }
[Range(1, 1000, ErrorMessage = "Price must be between 1 and 1000.")]
public decimal Price { get; set; }
}
এটি নিশ্চিত করে যে Name
ফিল্ডটি ফাঁকা রাখা যাবে না এবং Price
এর মান ১ থেকে ১০০০ এর মধ্যে থাকতে হবে।
Model Binding কাস্টমাইজ করার জন্য Custom Model Binder ব্যবহার করা যায়। উদাহরণস্বরূপ:
public class CustomBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue("customKey").FirstValue;
bindingContext.Result = ModelBindingResult.Success(value);
return Task.CompletedTask;
}
}
Model Binding ASP.NET Core-এর একটি শক্তিশালী ফিচার যা HTTP রিকোয়েস্ট থেকে ডেটা পেতে এবং সেটিকে অ্যাকশন মেথডের প্যারামিটার বা মডেলে রূপান্তর করতে সাহায্য করে। এটি ডেভেলপারদের কোড কমপ্লেক্সিটি কমিয়ে এবং ডেটা প্রসেসিং সহজ করে অ্যাপ্লিকেশন ডেভেলপমেন্টকে দ্রুততর করে তোলে।
ASP.NET Core-এ Model Binding প্রক্রিয়া ব্যবহারকারীর ইনপুট ডেটা (যেমন ফর্ম ডেটা বা URL কুইরি স্ট্রিং) মডেল ক্লাসের প্রপার্টিতে স্বয়ংক্রিয়ভাবে মাপসই করে। Form Data এবং Query String দুটি সাধারণ উপায় যা দিয়ে ডেটা বাইন্ড করা যায়।
Form Data সাধারণত HTTP POST রিকোয়েস্টের মাধ্যমে ফর্ম থেকে পাঠানো হয়। ASP.NET Core-এ, Form Data ব্যবহার করে ডেটা মডেল ক্লাসের প্রপার্টিতে বাইন্ড করা হয়, যা মূলত HTML ফর্মের ইনপুট ফিল্ডগুলির সাথে সম্পর্কিত।
ধরা যাক, আপনার একটি User মডেল রয়েছে এবং আপনি একটি ফর্ম থেকে ব্যবহারকারীর নাম এবং ইমেইল সংগ্রহ করতে চান।
Model:
public class User
{
public string Name { get; set; }
public string Email { get; set; }
}
View (HTML Form):
<form method="post" asp-action="Submit">
<div>
<label for="Name">Name:</label>
<input type="text" id="Name" name="Name" />
</div>
<div>
<label for="Email">Email:</label>
<input type="email" id="Email" name="Email" />
</div>
<button type="submit">Submit</button>
</form>
Controller:
public class UserController : Controller
{
[HttpPost]
public IActionResult Submit(User user)
{
if (ModelState.IsValid)
{
// Form data থেকে ডেটা বাইন্ডিং করা হয়েছে
// user.Name এবং user.Email ব্যবহার করা যেতে পারে
return Content($"Name: {user.Name}, Email: {user.Email}");
}
return View();
}
}
এখানে User
মডেলটি ফর্মের ইনপুট ফিল্ডগুলির সাথে বাইন্ড হয়েছে। যখন ফর্মটি সাবমিট করা হবে, ASP.NET Core স্বয়ংক্রিয়ভাবে ইনপুট ডেটাগুলিকে User
মডেল ক্লাসে মাপসই করবে।
Query String HTTP GET রিকোয়েস্টের অংশ হিসেবে URL-এর পরে পাঠানো ডেটা। Query String ডেটা সাধারণত URL-এ কিওয়ারি-পেয়ারের মাধ্যমে থাকে, যেমন ?id=1&name=John
। ASP.NET Core-এ, আপনি Query String থেকে ডেটা মডেল ক্লাসে বাইন্ড করতে পারেন।
ধরা যাক, আপনাকে URL থেকে id
এবং name
গ্রহণ করতে হবে এবং এই ডেটা মডেল ক্লাসে বাইন্ড করতে হবে।
Model:
public class UserQuery
{
public int Id { get; set; }
public string Name { get; set; }
}
Controller:
public class UserController : Controller
{
[HttpGet]
public IActionResult Search(UserQuery query)
{
if (ModelState.IsValid)
{
// Query string থেকে ডেটা বাইন্ডিং করা হয়েছে
return Content($"Id: {query.Id}, Name: {query.Name}");
}
return View();
}
}
এখানে, যখন আপনি URL এ এমন কিছু রিকোয়েস্ট করবেন:
/User/Search?id=1&name=John
ASP.NET Core স্বয়ংক্রিয়ভাবে Query String থেকে id
এবং name
প্যারামিটারগুলি UserQuery
মডেল ক্লাসের প্রপার্টিতে বাইন্ড করবে।
বৈশিষ্ট্য | Form Data (POST) | Query String (GET) |
---|---|---|
উপস্থিতি | HTTP POST রিকোয়েস্টের মধ্যে থাকে | URL এর পর Query String অংশে থাকে |
ডেটা নিরাপত্তা | ফর্ম ডেটা নিরাপদ, কারণ এটি URL এর বাইরে থাকে | URL-এ থাকা ডেটা সাধারণত দৃশ্যমান থাকে |
ডেটা পরিমাণ | বেশি পরিমাণ ডেটা পাঠানো যেতে পারে | সীমিত পরিমাণ ডেটা পাঠানো যায় |
ব্যবহার | ফর্ম সাবমিটের মাধ্যমে ব্যবহার করা হয় | URL এর মাধ্যমে ডেটা পাঠানো হয় |
ASP.NET Core-এ Form Data এবং Query String উভয়ই ডেটা বাইন্ডিংয়ের জন্য ব্যবহৃত হয়, তবে তাদের ব্যবহারের ক্ষেত্র আলাদা। Form Data সাধারণত POST রিকোয়েস্টে ব্যবহৃত হয় যেখানে বড় এবং সংবেদনশীল ডেটা পাঠানো যায়, আর Query String সাধারণত GET রিকোয়েস্টে ব্যবহৃত হয় যেখানে ছোট পরিমাণের ডেটা পাঠানো হয় এবং এটি URL-এ দৃশ্যমান থাকে। ASP.NET Core-এ এই ডেটাগুলিকে স্বয়ংক্রিয়ভাবে মডেল ক্লাসে বাইন্ড করা যায়, যার ফলে ডেটা প্রাপ্তি এবং ব্যবহারের প্রক্রিয়া সহজ হয়।
Model Validation হল ASP.NET Core অ্যাপ্লিকেশনের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা ব্যবহারকারীর ইনপুট যাচাই করতে সাহায্য করে। ASP.NET Core ডেটা অ্যানোটেশন (Data Annotations) ব্যবহার করে সহজে Model Validation পরিচালনা করতে সক্ষম। ডেটা অ্যানোটেশন হল সেই এট্রিবিউট যা আপনি আপনার Model ক্লাসের প্রপার্টির উপর প্রয়োগ করেন এবং এটি ইনপুট যাচাই করার জন্য ব্যবহৃত হয়, যেমন ফিল্ডের ধরন, ফিল্ডের জন্য প্রয়োজনীয়তা, ম্যাক্সিমাম এবং মিনিমাম মান ইত্যাদি।
ডেটা অ্যানোটেশন ব্যবহারের মাধ্যমে আপনি বিভিন্ন ধরনের ভ্যালিডেশন চেক করতে পারেন, যেমন:
ধরা যাক, আমরা একটি Person
মডেল তৈরি করছি, যার মধ্যে নাম, বয়স এবং ইমেল অ্যাড্রেস চেক করা হবে। এখানে ডেটা অ্যানোটেশন ব্যবহার করা হয়েছে।
using System.ComponentModel.DataAnnotations;
public class Person
{
[Required(ErrorMessage = "নাম অবশ্যই প্রদান করতে হবে")]
[StringLength(100, ErrorMessage = "নামটি ১০০ অক্ষরের মধ্যে হতে হবে")]
public string Name { get; set; }
[Range(18, 100, ErrorMessage = "বয়স ১৮ থেকে ১০০ এর মধ্যে হতে হবে")]
public int Age { get; set; }
[Required(ErrorMessage = "ইমেল ঠিকানা প্রদান করতে হবে")]
[EmailAddress(ErrorMessage = "একটি বৈধ ইমেল ঠিকানা প্রদান করুন")]
public string Email { get; set; }
}
এখানে:
Required
: ফিল্ডটি পূর্ণ করতে হবে।StringLength
: একটি স্ট্রিং-এর দৈর্ঘ্য সীমাবদ্ধ করা (এখানে ১০০ অক্ষরের মধ্যে থাকতে হবে)।Range
: বয়সের জন্য ১৮ থেকে ১০০ এর মধ্যে হতে হবে।EmailAddress
: একটি বৈধ ইমেল ঠিকানা যাচাই করা।using Microsoft.AspNetCore.Mvc;
public class PersonController : Controller
{
[HttpPost]
public IActionResult Create(Person person)
{
// Model Validation চেক করা
if (ModelState.IsValid)
{
// যদি Model Valid হয়, ডেটা প্রক্রিয়া করুন (ডেটাবেসে সেভ করুন)
return RedirectToAction("Index");
}
// যদি Model Invalid হয়, ফর্মটি আবার ভ্যালিডেশনসহ রেন্ডার করুন
return View(person);
}
}
এখানে, ModelState.IsValid ব্যবহার করে মডেলটি যাচাই করা হয়। যদি মডেলটি ভ্যালিড হয়, তাহলে রিডাইরেক্ট করা হবে, অন্যথায় View-এ Error বার্তা দেখানো হবে।
@model Person
<form asp-action="Create" method="post">
<div>
<label for="Name">নাম</label>
<input type="text" id="Name" name="Name" value="@Model.Name" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div>
<label for="Age">বয়স</label>
<input type="number" id="Age" name="Age" value="@Model.Age" />
<span asp-validation-for="Age" class="text-danger"></span>
</div>
<div>
<label for="Email">ইমেল</label>
<input type="email" id="Email" name="Email" value="@Model.Email" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
<button type="submit">সাবমিট</button>
</form>
@section Scripts {
<partial name="_ValidationScriptsPartial" />
}
এখানে:
asp-validation-for="Name"
, asp-validation-for="Age"
, এবং asp-validation-for="Email"
ব্যবহার করে আমরা সংশ্লিষ্ট ফিল্ডের জন্য Validation Error দেখাতে পারি।ASP.NET Core ডেটা অ্যানোটেশন দ্বারা Custom Validation তৈরি করা যায়, যা কিছু নির্দিষ্ট লজিক অনুসারে ইনপুট যাচাই করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, আমরা একটি কাস্টম ভ্যালিডেশন তৈরি করব যা একজন ব্যক্তির বয়স ১৮ বছরের কম হলে অনুমোদন করবে না।
public class AgeValidation : ValidationAttribute
{
public override bool IsValid(object value)
{
var age = (int)value;
return age >= 18;
}
}
public class Person
{
[Required(ErrorMessage = "নাম অবশ্যই প্রদান করতে হবে")]
public string Name { get; set; }
[AgeValidation(ErrorMessage = "বয়স ১৮ বছরের কম হতে পারবে না")]
public int Age { get; set; }
[Required(ErrorMessage = "ইমেল ঠিকানা প্রদান করতে হবে")]
[EmailAddress(ErrorMessage = "একটি বৈধ ইমেল ঠিকানা প্রদান করুন")]
public string Email { get; set; }
}
এখানে, AgeValidation
কাস্টম অ্যাট্রিবিউট ব্যবহার করা হয়েছে, যা বয়স ১৮ বছরের কম হলে ভুল দেখাবে।
ASP.NET Core-এ ডেটা অ্যানোটেশন ব্যবহার করে মডেল ভ্যালিডেশন একটি শক্তিশালী পদ্ধতি যা ইনপুট যাচাই করার জন্য খুবই কার্যকর। ডেটা অ্যানোটেশন সন্নিবেশ করার মাধ্যমে আপনি সহজেই বিভিন্ন ধরনের ভ্যালিডেশন চেক (যেমন Required, StringLength, Range, ইত্যাদি) করতে পারেন। এছাড়া, আপনি কাস্টম ভ্যালিডেশন তৈরি করে নিজের শর্তানুযায়ী ইনপুট যাচাই করতে পারেন, যা অ্যাপ্লিকেশনের নিরাপত্তা এবং পারফরম্যান্সের জন্য অত্যন্ত গুরুত্বপূর্ণ।
ASP.NET Core-এ ডেটা ভ্যালিডেশনের জন্য সাধারণত Data Annotations ব্যবহার করা হয়। তবে কখনও কখনও ডিফল্ট ভ্যালিডেশন যথেষ্ট না হলে, ডেভেলপাররা কাস্টম ভ্যালিডেশন তৈরি করতে পারেন। কাস্টম ভ্যালিডেশন আপনাকে আপনার নির্দিষ্ট লজিকের ভিত্তিতে ডেটা যাচাই করার সুযোগ দেয়।
আপনার ভ্যালিডেশন লজিক তৈরির জন্য একটি ক্লাস তৈরি করুন, যা ValidationAttribute
থেকে ইনহেরিট করবে। উদাহরণস্বরূপ, নিচে একটি কাস্টম ভ্যালিডেশন দেখানো হলো, যা চেক করে যে একটি নাম অক্ষর দিয়ে শুরু হচ্ছে কিনা:
using System.ComponentModel.DataAnnotations;
public class StartsWithLetterAttribute : ValidationAttribute
{
private readonly char _letter;
public StartsWithLetterAttribute(char letter)
{
_letter = letter;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value is string stringValue && !stringValue.StartsWith(_letter))
{
return new ValidationResult($"The field must start with the letter '{_letter}'.");
}
return ValidationResult.Success;
}
}
মডেল ক্লাসে আপনার তৈরি করা কাস্টম ভ্যালিডেশন অ্যাট্রিবিউট ব্যবহার করুন।
public class Product
{
public int Id { get; set; }
[StartsWithLetter('P')]
public string Name { get; set; }
public decimal Price { get; set; }
}
Controller-এ মডেলের ডেটা যাচাই করা হয় এবং ত্রুটি পাওয়া গেলে তা ব্যবহারকারীর কাছে দেখানো হয়।
public class ProductsController : Controller
{
[HttpPost]
public IActionResult Create(Product product)
{
if (ModelState.IsValid)
{
// মডেলটি সঠিক, ডেটা সেভ করুন
return RedirectToAction("Index");
}
// মডেলে ত্রুটি আছে, ভিউতে ফিরে যান
return View(product);
}
}
আপনার ভ্যালিডেশন সিঙ্ক্রোনাস (সাধারণ পদ্ধতিতে) তৈরি করলে তা মডেলের ডেটা সাবমিটের সময়ই যাচাই হবে। এটি উপরের উদাহরণে দেখানো হয়েছে।
কখনও কখনও ভ্যালিডেশন অ্যাসিঙ্ক্রোনাস হতে পারে, যেমন ডাটাবেস থেকে ডেটা যাচাই করা। এর জন্য IValidatableObject
ইন্টারফেস ব্যবহার করা যায়।
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
public class Product : IValidatableObject
{
public int Id { get; set; }
public string Name { get; set; }
public async Task<IEnumerable<ValidationResult>> ValidateAsync(ValidationContext validationContext)
{
var validationResults = new List<ValidationResult>();
if (Name.Length < 5)
{
validationResults.Add(new ValidationResult("Name must be at least 5 characters long."));
}
return validationResults;
}
}
আপনার ভ্যালিডেশন মেসেজ কাস্টমাইজ করতে ErrorMessage
প্রপার্টি ব্যবহার করুন:
[StartsWithLetter('P', ErrorMessage = "The name must start with the letter 'P'.")]
public string Name { get; set; }
ASP.NET Core ভ্যালিডেশন ত্রুটি প্রদর্শনের জন্য ModelState এবং Tag Helpers ব্যবহার করে। উদাহরণ:
<form asp-action="Create">
<div>
<label asp-for="Name"></label>
<input asp-for="Name" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<button type="submit">Submit</button>
</form>
ভ্যালিডেশন ত্রুটি প্রদর্শনের জন্য Validation Summary ব্যবহার করতে পারেন:
<div asp-validation-summary="All" class="text-danger"></div>
Custom Validation ASP.NET Core অ্যাপ্লিকেশনে ডেটা যাচাই করার জন্য একটি শক্তিশালী টুল। এটি ডেভেলপারদের নির্দিষ্ট লজিক বাস্তবায়ন করার সুযোগ দেয় এবং অ্যাপ্লিকেশনকে আরও কার্যকর এবং ব্যবহারকারীবান্ধব করে তোলে।
common.read_more